﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
using Website.Logger;
using System.Drawing;
using DAL;
using BOL;
using WebLib;
using System.Web.Script.Services;
using System.Web.Services;
using UtilityExtensions;
namespace UILGestion.ObraAdmin.EstructuraCompras
{
    public partial class RecursoSeleccionPanel : System.Web.UI.UserControl
    {

        public List<RecursoListInfo> ItemLista
        {
            get
            {
                List<RecursoListInfo> ItemListaw = new List<RecursoListInfo>();
                var lista = (List<RecursoListInfo>)Session[idRecursoPartirList.Value.ToString()];
                if (lista.Count > 0)
                {
                    foreach (GridViewRow row in itemGridView.Rows)
                    {
                        CheckBox cb = (CheckBox)(row.FindControl("chkEmployeeSelector"));

                        if (cb != null && cb.Checked)
                        {
                            Int32 employeeId = (Int32)itemGridView.DataKeys[row.RowIndex].Value;
                            RecursoListInfo item = lista.Single(p => p.idInternal == employeeId);

                            ItemListaw.Add(item);
                        }
                    }
                }
                return ItemListaw;
            }
        }

       

        public int idestructuraCostoitem
        {
            get
            {
                return int.Parse(idEstructuraCostoPartir.Value);
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!this.IsPostBack)
                {
                    idEstructuraCosto.Value = (string)Request.QueryString["id"];
                    idObra.Value = (string)Request.QueryString["idObra"];
                    FormatForm();

                }
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

            //FormatForm();

        }

        public void LoadRecurso()
        {
            try
            {

                List<RecursoListInfo> itemList2 = new List<RecursoListInfo>();
                Session[idRecursoPartirList.Value.ToString()] = itemList2;
                BindDataItem();
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }

        }

        private void ShowAllComboBox()
        {
          
            Obra obra = DbUtil.Db.Obras.Single(p => p.idInternal == int.Parse(idObra.Value));

            ListValueInfo precero = new ListValueInfo();
            precero.idInternal = 0;
            precero.descripcion = "----Seleccione Presupuesto----";


            List<ListValueInfo> presuList = new List<ListValueInfo>();
            presuList.Add(precero);
            presuList.AddRange(new ListValueBL().GetPrespuestoHabit(int.Parse(idObra.Value)));

            presupuestoDropDownList.DataTextField = "descripcion";
            presupuestoDropDownList.DataValueField = "idInternal";
            presupuestoDropDownList.DataSource = presuList.ToList();
            presupuestoDropDownList.DataBind();

            campoDropDownList.Items.Add("Partida");
            campoDropDownList.Items.Add("Recurso");

            //tipoContratoLabel.Value = obra.tipoCambio.ToString();
            //tipoCambioLabel.Text = obra.tipoCambio.ToString();
            loadRecursoGrupo();

            

           



        }
        public void loadRecursoGrupo()
        {


            int idPresupuesto=presupuestoDropDownList.SelectedValue.ToInt();
             ListValueBL pesu = new ListValueBL();

            recursogrupoDropDownList.DataTextField = "descripcion";
            recursogrupoDropDownList.DataValueField = "idInternal";

            recursogrupoDropDownList.DataSource = pesu.GetGrupoRecursoPresuList(idPresupuesto);
            recursogrupoDropDownList.DataBind();
        }

        private void FormatForm()
        {

            idRecursoPartirList.Value = Parametros.GenerarID().ToString();
            ShowAllComboBox();
            // paro los casos segun lo  revisado por el tipo de obra
            // RL:si  es del tipo promocion , que no pueden  usuar recursos solo los de la partida
                    //y que su busqueda avanzado solo este en partida
            // para el caso de existir recurso adicional en esta obra. pueda agregar a esta partida
            bool bitSameEstructura = DbUtil.Db.Obras.Single(p => p.idInternal == idObra.Value.ToInt()).TipoObra.bitSameEstructura.Value;
            this.bitSameEstructura.Value = bitSameEstructura.ToInt().ToString();
            if (bitSameEstructura)
            {
                grupoRecursoLBL.Visible = false;
                campoDropDownList.Enabled = false;
                avanzadoPNL.Visible = false;
                recursogrupoDropDownList.Visible = false;
                
            }
            //solo si existe adicionales se activa
            
            
            
            List<RecursoListInfo> itemList2 = new List<RecursoListInfo>();
            Session[idRecursoPartirList.Value.ToString()] = itemList2;



            BindDataItem();
          


        }
        private void resetEmpty()
        {
            if (itemGridView.Rows.Count == 0)
            {
                List<RecursoListInfo> itemList0 = new List<RecursoListInfo>();
                RecursoListInfo itemcero = new RecursoListInfo();
                itemcero.idInternal = 0;
                itemList0.Add(itemcero);
                itemGridView.DataSource = itemList0;
                itemGridView.DataBind();
                itemGridView.Rows[0].Visible = false;
            }

        }
        private void setEstadistica()
        {
            List<RecursoListInfo> item = this.ItemLista;
               
            totalSolesLbl.Text = "0.00";
            totalDolaresLbl.Text = "0.00";
            if (item.Count > 0)
            {
                totalSolesLbl.Text = String.Format("{0} {1:N}", "S/.", item.Where(p => p.idMoneda == 3).Sum(p => p.parcial-p.parcialUso));
                totalDolaresLbl.Text = String.Format("{0} {1:N}", "$", item.Where(p => p.idMoneda == 4).Sum(p => p.parcial - p.parcialUso));

            }
           
            
        
            totalUpdatePanel.Update();
        }
        private void BindDataItem()
        {

            List<RecursoListInfo> item =
                (List<RecursoListInfo>)Session[idRecursoPartirList.Value.ToString()];

            itemGridView.DataSource = item;
            itemGridView.DataBind();
            resetEmpty(); //necesario para add

            seleccionUpdatePanel.Update();
           



           



        }
       

        protected void ItemAllSelectChange(object sender, EventArgs e)
        {
            //solo los seleccionados
            //seleccionamos todos los  item
            foreach (GridViewRow row in itemGridView.Rows)
            {
                CheckBox cb = (CheckBox)(row.FindControl("chkEmployeeSelector"));
                cb.Checked = ((CheckBox)sender).Checked;
            }
            grillaUpdatePanel.Update();
            setEstadistica();

        }
        protected void ItemSelectChange(object sender, EventArgs e)
        {
            //solo los seleccionados
            //seleccionamos todos los  item
           // List<RecursoListInfo> itema = this.ItemLista;        
            setEstadistica();

        }


        protected string GetSortDirection(string column)
        {

            // By default, set the sort direction to ascending.
            string sortDirection = "ASC";

            // Retrieve the last column that was sorted.

            string sortExpression = ViewState["SortExpression"] as string;

            if (sortExpression != null)
            {
                // Check if the same column is being sorted.
                // Otherwise, the default value can be returned.
                if (sortExpression == column)
                {
                    string lastDirection = ViewState["SortDirection"] as string;
                    if ((lastDirection != null) && (lastDirection == "ASC"))
                    {
                        sortDirection = "DESC";
                    }
                }
            }

            // Save new values in ViewState.
            ViewState["SortDirection"] = sortDirection;
            ViewState["SortExpression"] = column;

            return sortDirection;
        }

        protected void SortingItem(object sender, GridViewSortEventArgs e)
        {
            try
            {


                string orden = e.SortExpression + " " + GetSortDirection(e.SortExpression);

                int grupo = 27;
                int.TryParse(recursogrupoDropDownList.SelectedValue, out grupo);



                string valor = ValorTextBox.Text;

                PresupuestoBL insumo = new PresupuestoBL();
                List<RecursoListInfo> db = insumo.getRecursosPresupuestoList(
                                               int.Parse(presupuestoDropDownList.SelectedValue),
                                                grupo, int.Parse(idNivelBusqueda.Value), valor, orden);

                Session[idRecursoPartirList.Value.ToString()] = db;


                BindDataItem();
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            } 
        }



        private void findRecurso()
        {

            int grupo = 27;
            int.TryParse(recursogrupoDropDownList.SelectedValue, out grupo);

           
            string valor = ValorTextBox.Text;

                PresupuestoBL insumo = new PresupuestoBL();
                List<RecursoListInfo> db = insumo.getRecursosPresupuestoList(
                                               int.Parse(presupuestoDropDownList.SelectedValue),
                                                grupo, int.Parse(idNivelBusqueda.Value), valor, valor);

                Session[idRecursoPartirList.Value.ToString()] = db;

                BindDataItem();
           

        }



        protected void Button3_Click(object sender, EventArgs e)
        {
            try
            {

                setEstadistica();
                if (presupuestoDropDownList.Items.Count > 0)
                {
                 if (presupuestoDropDownList.SelectedValue != "0")
                        {
                             idNivelBusqueda.Value="0";
                             findRecurso();
                        }
                }
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }
        protected void Button5_Click(object sender, EventArgs e)
        {
            try
            {
                if (presupuestoDropDownList.Items.Count > 0)
                {

                    if (presupuestoDropDownList.SelectedValue != "0")
                    {

                        string campo = campoDropDownList.SelectedValue;
                        string valor = ValorTextBox.Text;
                        if (campo == "Partida")
                        {
                            idNivelBusqueda.Value = "1";
                            findRecurso();
                        }
                        if (campo == "Recurso")
                        {
                            idNivelBusqueda.Value = "2";
                            findRecurso();

                        }
                    }
                }
            }
            catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }

        protected void presupuestoDropDownList_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                loadRecursoGrupo();
            }
             catch (SqlException sqlex)
            {
                WebServerSideSqlError.Log(sqlex);
                ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + sqlex.Message.Replace("'", "") + "');", true);


            }
            catch (Exception ex)
            {
                WebServerSideError.Log(ex);
                ScriptManager.RegisterClientScriptBlock(this.Page, typeof(UserControl),
                 "uniqueKey" + DateTime.Now, "alert('" + ex.Message.Replace("'", "") + "');", true);

            }
        }

       
        
         
    }
}